質問
WCFサービスの一方向法を作成したかった。すべて問題ない限り 障害メッセージを返します - あれば。
WSDLファイルと契約ファイルにはWSCFブルーコードジェネレータを使用しています。
WSDL操作要素では、「入力」と「障害」の子要素のみがあります。 私がサービスを実行するとき、私は片道通信で障害メッセージを宣言できない情報を得た情報を得ました。エラーが発生した場合、メッセージが表示されます。
しかし私は私がWebサービス/ WSDLの作成規則を破ったかどうか疑問に思っています... WSDL Service Schema Generatorから、一方向の通信( 'true'に設定されている)やその他のプログラミング言語では、おそらくその他同じ...
だから私がしたことは正しいですか?ジェネレータがコードを適切に作成できるように、WSDLを変更する方法は?
理論的には片道通信で障害を使用できない場合は、誤りを返すための応答に追加の構造が必要ですか?
ありがとう!
解決
一方向操作は失敗を返すことができないということです。 a>クライアントへ。 void
を生成したい場合は、WCFでサービス操作ではなく、WSDL契約でその操作に空の出力要素を追加する必要があります。
.NETベースのWSDLパーサー( wscf.blue と svcutil )は、 n't の<wsdl:operation>
要素に対して一方向のサービス操作を生成します。対応する<wsdl:output>
要素を持っています。
次に、このWSDL操作片道:
<wsdl:definitions>
<wsdl:portType>
...
<wsdl:operation name="Foo">
<wsdl:input message="tns:FooRequest" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
.
一方、空の<wsdl:output>
要素(すなわち、空シーケンスを含むXSDタイプ)を用いて動作を定義すると、void
にマッピングされます。 .NETでは、障害宣言を任意に含めることができます:
<wsdl:definitions>
<wsdl:portType>
...
<wsdl:operation name="Foo">
<wsdl:input message="tns:FooRequest" />
<wsdl:output message="tns:FooResponse" />
<wsdl:fault message="tns:FooFault" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
.
<tns:FooResponse>
タイプは単に次のように定義されています。
<xs:element name="FooResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
. 他のヒント
WCFでは、一方向の手段では返された値が返されず、クライアントは呼び出しの成功または失敗を気にしません。
WCFでは、WCFを介してMSMQを操作するなど、一方向の他の操作も行っています。その後、操作は通常一方向に設定されています。
だから、呼び出し状況を示すために何かを返す場合は、一方的な選択肢ではないが、代わりに一方向ではない通常のWCF操作を使用することができます。
一方向操作のために、ここにあなたの参照の記事
あなたが正しいことをしたと感じます。任意の種類のクライアント(C#、Java、C ++、PHP)に対して、プロキシを作成するためにWSDLが必要です。私はそれが他の言語でも働くべきだと思います。SOAPUI(Neutral SOAPクライアント)を使用してサービスをテストするのに最適です。